package demo2;

class Animal {
    public String name;
    public int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Animal() {

    }
    public void sleep() {
        System.out.println(this.name + "正在睡觉！");
    }
}

class Cat extends Animal {
    public Cat(String name, int age) {
        super(name, age);
    }
    public void mew() {
        System.out.println(this.name + "正在吃猫粮！");
    }
}
class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }
    public void bark() {
        System.out.println(this.name + "正在吃狗粮！");
    }
}
public class test2 {
    public static void main(String[] args) {
        //向上转型
        Animal animal = new Dog("花花", 20);
        //向下转型（本身为狗，还原为狗，所以是安全的）
        Dog dog = (Dog)animal;
        dog.bark();

        //向下转型（本身为狗，还原为猫，所以是不安全的，不能跨物种嘛,*****所以一般不推荐使用应该尽量避免）
        //这里表示如果animal为Cat的实例化对象，很明显不是，它是Dog的实例化对象
        if(animal instanceof Cat) {
            Cat cat = (Cat)animal;
            cat.mew();
        }else {
            System.out.println("我是猪猪!");
        }
    }
}
